package ru.ifmo.automaton;

import java.util.List;

/**
 * @author avhaliullin
 */
public interface Automaton<C, S> extends Iterable<S> {
    public S getInitialState();

    public int getStatesCount();

    public void goToState(S state);

    public S getCurrentState();

    public int getTerminalStatesCount();

    public boolean isInTerminalState();

    public S step(C... word);

    public List<C> getAlphabet();
}
